/*
 * Copyright 2015-2016 fenger-init.com. All rights reserved.
 * Support: http://www.fenger-init.com
 * License: http://www.fenger-init.com/license
 */
package com.xiangying.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * Dao - 基类
 * 
 * @author luolihong
 * @version 1.0
 */
public interface BaseDao<T,D extends Serializable>{
	
	/**
	 * 根据ID查找实体类
	 * @param id
	 * @return
	 */
	T selectByPrimaryKey(D id);
	
	/**
	 * 查找实体对象
	 * 
	 * @param param
	 * @return 实体对象，若不存在则返回null
	 */
	T selectByParam(Map<String, Object> param);
	
	/**
	 * 查询所有实体
	 * @return
	 */
	List<T> findList(Map<String, Object> param);

	/**
	 * 持久化实体对象
	 * 
	 * @param entity 实体对象
	 */
	int insert(T entity);
	
	/**
	 * 持久化实体对象(判断每个字段)
	 * @param entity
	 * @return
	 */
	int insertSelective(T entity);
	
	/**
	 * 批量插入
	 * @param entitys
	 * @return
	 */
	int insertBatch(List<T> entitys);
	
	/**
	 * 更新实体对象
	 * 
	 * @param entity
	 *            实体对象
	 */
	int updateByPrimaryKey(T entity);
	
	/**
	 * 更新实体对象(判断每个字段)
	 * @param entity
	 * @return
	 */
	int updateByPrimaryKeySelective(T entity);

	
	/**
	 * 批量更新
	 * @param entityList
	 */
	void updateForBatch(List<T> entityList);
	
	/**
	 * 根据ID删除
	 * @param id
	 */
	void deleteByPrimaryKey(D id);
	
	/**
	 * 批量删除
	 * @param ids
	 */
	void deleteForBatch(D[] ids);
}